package com.jinghangzz.shop.back.controller;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSONObject;
import com.jinghangzz.shop.common.controller.BaseController;
import com.jinghangzz.shop.common.util.ConstatFinalUtil;
import com.jinghangzz.shop.common.util.PageInfoUtil;
import com.jinghangzz.shop.demo.pojo.ADynasty;
import com.jinghangzz.shop.demo.pojo.AKing;
import com.jinghangzz.shop.demo.service.IDemoService;

/**
 * 用户的前台Controller
 * 	一个模块一个Controller
 * @author TeaBig
 */
@Controller
@RequestMapping("/back/demo/")
public class DemoBackController extends BaseController
{
	@Resource
	private IDemoService demoService;
	
	/*=========朝代模块操作开始=============*/
	/**
	 * 朝代列表
	 * Controller里面的代码就是当年Servlet中的代码.
	 * 就是把Junit中的代码拿过来
	 * 		这代码所中所有的写死的部分,问jsp(请求体要); a=1&b=2&c=3
	 * @return
	 */
	@RequestMapping("/dynastyList")
	public String dynastyList(HttpServletRequest request,Model model)
	{
		ConstatFinalUtil.SYS_LOGGER.info("UsersHeadController---dynastyList");
		/* 搜索条件 */
		Map<String, Object> condMap = new HashMap<String, Object>();
		/* 准备搜索条件 */
		proccedSearchCond(request, condMap);
		/* 生成分页工具类放到单独的一个方法中 */
		PageInfoUtil pageInfoUtil = proccedPageInfoUtil(request);
		
		/* 查询多条记录 */
		List<ADynasty> dynastyList = this.demoService.findCondListDynastyService(pageInfoUtil,condMap);
		
		/* 因为Controller要跳转到jsp上面,
		 * 得需要把List放到request中 */
		model.addAttribute("dynastyList", dynastyList);
		model.addAttribute("pageInfoUtil", pageInfoUtil);
		return "/back/demo/dynastyList" ; 
	}

	/**
	 * 打开朝代添加的页面
	 * @return
	 */
	@RequestMapping("/dynastyInsert")
	public String dynastyInsert()
	{
		ConstatFinalUtil.SYS_LOGGER.info("UsersHeadController---dynastyInsert");
		return "/back/demo/dynastyInsert" ; 
	}
	
	/**
	 * 添加提交操作
	 * 	 目的是要入库:
	 * Controller的代码就是把junit中的代码拷贝过来,
	 * 把里面的死值换成活值
	 * 
	 * 接收参数
	 * 处理参数
	 * new对象
	 * 赋值
	 * 
	 * 请求体中的信息:键得和pojo的属性名一样
	 * 
	 * 返回值期望是一个json
	 * @return
	 */
	@RequestMapping(value = "/dynastyInsertSubmit",produces = "text/html;charset=UTF-8")
	@ResponseBody
	public String dynastyInsertSubmit(ADynasty dynasty,String pubTimeStr,Model model)
	{
		ConstatFinalUtil.SYS_LOGGER.info("UsersHeadController---dynastyInsertSubmit");
		JSONObject resultDbJSON = new JSONObject();
		/* 先让Spring的驱动自动赋值
		 * 如果赋值失败,我再兜底 */
		/* 发布时间:时间赋值,
		 * 转换器
		 * 手动赋值
		 *  */
		Date pubTime = this.dateUtil.strToDateTime(pubTimeStr);
		dynasty.setPubTime(pubTime);
		
		try
		{
			resultDbJSON = this.demoService.saveOneDynastyService(dynasty );
			ConstatFinalUtil.SYS_LOGGER.info("返回结果:{}",resultDbJSON.toJSONString());
			//this.info = resultDbJSON.getString("info");
		} catch (Exception e)
		{
			ConstatFinalUtil.SYS_LOGGER.error("保存报错了,",e);
			info = "保存抛异常了;异常信息:" + e.toString(); 
		}
		/* 要把提示信息放到request中 */
		//model.addAttribute("info", info);
		return resultDbJSON.toJSONString() ; 
	}
	
	/**
	 * 打开朝代更新的页面
	 * @return
	 */
	@RequestMapping("/dynastyUpdate")
	public String dynastyUpdate(int id,String operType , Model model)
	{
		ConstatFinalUtil.SYS_LOGGER.info("UsersHeadController---dynastyUpdate");
		/* 根据Id查询朝代
		 * junit中的查询单条
		 *  */
		/* 搜索条件 */
		Map<String, Object> condMap = new HashMap<String, Object>();
		/* 为啥map的键要是id呢?
		 * 因为映射文件中指定的sql语句标签,#{id}
		 *  */
		condMap.put("id", id);
		/* 查询一条朝代 */
		ADynasty dynasty = this.demoService.findOneDynastyService(condMap);
		/* 把朝代放到request中 */
		model.addAttribute("dynasty", dynasty);
		if("update".equalsIgnoreCase(operType))
		{
			/* 更新页面 */
			return "/back/demo/dynastyUpdate" ; 
		}
		/* 查看操作 */
		return "/back/demo/dynastyInfo" ; 
	}
	
	/**
	 * 朝代更新提交操作
	 * @return
	 */
	@RequestMapping(value = "/dynastyUpdateSubmit",produces = "text/html;charset=UTF-8")
	@ResponseBody
	public String dynastyUpdateSubmit(int id,String operType , String pubTimeStr,Model model,
			HttpServletRequest request)
	{
		ConstatFinalUtil.SYS_LOGGER.info("UsersHeadController---dynastyUpdateSubmit");
		JSONObject resultDbJSON = new JSONObject();
		/* 根据Id查询朝代
		 * junit中的查询单条
		 *  */
		/* 搜索条件 */
		Map<String, Object> condMap = new HashMap<String, Object>();
		/* 为啥map的键要是id呢?
		 * 因为映射文件中指定的sql语句标签,#{id}
		 *  */
		condMap.put("id", id);
		/* 查询一条朝代 */
		ADynasty dynasty = this.demoService.findOneDynastyService(condMap);
		/* 把朝代放到request中 */
		model.addAttribute("dynasty", dynasty);
		
		/* 更新一些属性 */
		/* 一一的接收参数,采用request方法来做 */
		String name = request.getParameter("name");
		String stYear = request.getParameter("stYear");
		String edYear = request.getParameter("edYear");
		String status = request.getParameter("status");
		
		dynasty.setName(name);
		dynasty.setStYear(Integer.valueOf(stYear));
		dynasty.setEdYear(Integer.valueOf(edYear));
		dynasty.setStatus(Byte.valueOf(status));
		
		/* 先让Spring的驱动自动赋值
		 * 如果赋值失败,我再兜底 */
		/* 发布时间:时间赋值,
		 * 转换器
		 * 手动赋值
		 *  */
		Date pubTime = this.dateUtil.strToDateTime(pubTimeStr);
		dynasty.setPubTime(pubTime);
		
		try
		{
			/* 更新一条记录 */
			resultDbJSON = this.demoService.updateOneDynastyService(dynasty);
			ConstatFinalUtil.SYS_LOGGER.info("返回结果:{}",resultDbJSON.toJSONString());
			//this.info = resultDbJSON.getString("info");
		} catch (Exception e)
		{
			ConstatFinalUtil.SYS_LOGGER.error("保存报错了,",e);
			info = "保存抛异常了;异常信息:" + e.toString(); 
		}
		/* 要把提示信息放到request中 */
		//model.addAttribute("info", info);
		return resultDbJSON.toJSONString() ; 
	}
	/*=========朝代模块操作结束=============*/
	
	/*=========皇上模块操作开始=============*/
	/**
	 * 皇上列表
	 * Controller里面的代码就是当年Servlet中的代码.
	 * 就是把Junit中的代码拿过来
	 * 		这代码所中所有的写死的部分,问jsp(请求体要); a=1&b=2&c=3
	 * @return
	 */
	@RequestMapping("/kingList")
	public String kingList(HttpServletRequest request,Model model)
	{
		ConstatFinalUtil.SYS_LOGGER.info("UsersHeadController---kingList");
		/* 搜索条件 */
		Map<String, Object> condMap = new HashMap<String, Object>();
		/* 准备搜索条件 */
		proccedSearchCond(request, condMap);
		
		/* 再准备特殊的条件 */
		String dynaId = request.getParameter("dynaId");
		request.setAttribute("dynaId", dynaId);
		condMap.put("dynaId", dynaId);
		
		/* 分页工具类 */
		PageInfoUtil pageInfoUtil = proccedPageInfoUtil(request);
		
		/* 查询多条记录 */
		List<AKing> kingList = this.demoService.findCondListKingService(pageInfoUtil,condMap);
		
		/* 因为Controller要跳转到jsp上面,
		 * 得需要把List放到request中 */
		model.addAttribute("kingList", kingList);
		model.addAttribute("pageInfoUtil", pageInfoUtil);
		
		/* 查询所有启用的朝代 */
		condMap.clear();
		condMap.put("status", "1");
		List<ADynasty> dynastyList = this.demoService.findCondListDynastyService(null, condMap);
		model.addAttribute("dynastyList", dynastyList);
		return "/back/demo/kingList" ; 
	}
	
	/**
	 * 打开皇上添加的页面
	 * @return
	 */
	@RequestMapping("/kingInsert")
	public String kingInsert(Model model)
	{
		ConstatFinalUtil.SYS_LOGGER.info("UsersHeadController---kingInsert");
		Map<String, Object> condMap = new HashMap<String, Object>();
		/* 查询所有启用的朝代 */
		condMap.clear();
		condMap.put("status", "1");
		List<ADynasty> dynastyList = this.demoService.findCondListDynastyService(null, condMap);
		model.addAttribute("dynastyList", dynastyList);
		return "/back/demo/kingInsert" ; 
	}
	
	/**
	 * 添加提交操作
	 * 	 目的是要入库:
	 * Controller的代码就是把junit中的代码拷贝过来,
	 * 把里面的死值换成活值
	 * 
	 * 接收参数
	 * 处理参数
	 * new对象
	 * 赋值
	 * 
	 * 请求体中的信息:键得和pojo的属性名一样
	 * @return
	 */
	@RequestMapping("/kingInsertSubmit")
	public String kingInsertSubmit(AKing king,String pubTimeStr,Model model)
	{
		ConstatFinalUtil.SYS_LOGGER.info("UsersHeadController---kingInsertSubmit");
		/* 先让Spring的驱动自动赋值
		 * 如果赋值失败,我再兜底 */
		/* 发布时间:时间赋值,
		 * 转换器
		 * 手动赋值
		 *  */
		Date pubTime = this.dateUtil.strToDateTime(pubTimeStr);
		king.setPubTime(pubTime);
		
		try
		{
			JSONObject resultDbJSON = this.demoService.saveOneKingService(king );
			ConstatFinalUtil.SYS_LOGGER.info("返回结果:{}",resultDbJSON.toJSONString());
			this.info = resultDbJSON.getString("info");
		} catch (Exception e)
		{
			ConstatFinalUtil.SYS_LOGGER.error("保存报错了,",e);
			info = "保存抛异常了;异常信息:" + e.toString(); 
		}
		/* 要把提示信息放到request中 */
		model.addAttribute("info", info);
		return this.kingInsert(model) ; 
	}
	
	/**
	 * 打开皇上更新的页面
	 * @return
	 */
	@RequestMapping("/kingUpdate")
	public String kingUpdate(int id,String operType , Model model)
	{
		ConstatFinalUtil.SYS_LOGGER.info("UsersHeadController---kingUpdate");
		/* 根据Id查询皇上
		 * junit中的查询单条
		 *  */
		/* 搜索条件 */
		Map<String, Object> condMap = new HashMap<String, Object>();
		/* 为啥map的键要是id呢?
		 * 因为映射文件中指定的sql语句标签,#{id}
		 *  */
		condMap.put("id", id);
		/* 查询一条皇上 */
		AKing king = this.demoService.findOneKingService(condMap);
		/* 把皇上放到request中 */
		model.addAttribute("king", king);
		if("update".equalsIgnoreCase(operType))
		{
			/* 查询所有启用的朝代 */
			condMap.clear();
			condMap.put("status", "1");
			List<ADynasty> dynastyList = this.demoService.findCondListDynastyService(null, condMap);
			model.addAttribute("dynastyList", dynastyList);
			
			/* 更新页面 */
			return "/back/demo/kingUpdate" ; 
		}
		/* 查看操作 */
		return "/back/demo/kingInfo" ; 
	}
	
	/**
	 * 皇上更新提交操作
	 * @return
	 */
	@RequestMapping("/kingUpdateSubmit")
	public String kingUpdateSubmit(int id,String operType , String pubTimeStr,Model model,
			HttpServletRequest request)
	{
		ConstatFinalUtil.SYS_LOGGER.info("UsersHeadController---kingUpdate");
		/* 根据Id查询皇上
		 * junit中的查询单条
		 *  */
		/* 搜索条件 */
		Map<String, Object> condMap = new HashMap<String, Object>();
		/* 为啥map的键要是id呢?
		 * 因为映射文件中指定的sql语句标签,#{id}
		 *  */
		condMap.put("id", id);
		/* 查询一条皇上 */
		AKing king = this.demoService.findOneKingService(condMap);
		/* 把皇上放到request中 */
		model.addAttribute("king", king);
		
		/* 更新一些属性 */
		/* 一一的接收参数,采用request方法来做 */
		String dynaId = request.getParameter("dynaId");
		String name = request.getParameter("name");
		String miaoHao = request.getParameter("miaoHao");
		String nianHao = request.getParameter("nianHao");
		String age = request.getParameter("age");
		String status = request.getParameter("status");
		
		king.setDynaId(Integer.valueOf(dynaId));
		king.setName(name);
		king.setMiaoHao(miaoHao);
		king.setNianHao(nianHao);
		king.setAge(Integer.valueOf(age));
		king.setStatus(Byte.valueOf(status));
		
		/* 先让Spring的驱动自动赋值
		 * 如果赋值失败,我再兜底 */
		/* 发布时间:时间赋值,
		 * 转换器
		 * 手动赋值
		 *  */
		Date pubTime = this.dateUtil.strToDateTime(pubTimeStr);
		king.setPubTime(pubTime);
		
		try
		{
			/* 更新一条记录 */
			JSONObject resultDbJSON = this.demoService.updateOneKingService(king);
			ConstatFinalUtil.SYS_LOGGER.info("返回结果:{}",resultDbJSON.toJSONString());
			this.info = resultDbJSON.getString("info");
		} catch (Exception e)
		{
			ConstatFinalUtil.SYS_LOGGER.error("保存报错了,",e);
			info = "保存抛异常了;异常信息:" + e.toString(); 
		}
		model.addAttribute("info", info);
		/* 查看操作 */
		return "/back/demo/kingUpdate" ; 
	}
	/*=========皇上模块操作结束=============*/
}
